
class Hero():

    # 实例方法，第一个参数必须是self（可以改，但是默认是self，改成任意名字，第一个参数一定是实例对象）
    def putong_gongji(self):
        print("英雄攻击了一下！")

    def func1(self):
        self.putong_gongji()

    # 类方法，第一个参数必须是cls（可以改，但是默认是cls，改成任意名字，第一个参数一定是代表的类）
    @classmethod
    def back_home(cls):
        print('英雄回城了！')

    def func2(self):
        self.back_home()

    @staticmethod
    def static_func():
        print("这是一个静态方法！")

    def func3(self):
        Hero.static_func()
        self.static_func()

    def __func(self):
        print("这是一个私有方法！")

    def func4(self):
        self.__func()

# 实例化对象：gailun
gailun = Hero()
xiaopao = Hero()
# # 实例方法，可以由对象直接调用
# gailun.putong_gongji()
# # 实例方法，不能由类直接调用，如果通过类名.方法名()的方式，必须传一个对象
# Hero.putong_gongji(gailun)
# # 实例方法，可以在类中被其它方法调用
# gailun.func1()

# # 类方法，可以由对象直接调用
# gailun.back_home()
# 类方法，可以由类直接调用
# Hero.back_home()
# 类方法，可以在类的内部由实例方法直接调用
# gailun.func2()

# # 静态方法，可以由对象直接调用
# gailun.static_func()
# # 静态方法，可以由类直接调用
# Hero.static_func()
# # 私有方法，不能由对象直接调用
# gailun.__func()
# # 私有方法，不能由类直接调用
# Hero.__func()
# 私有方法，只能在类的内部被调用
# gailun.func4()